package com.saydc.actions.incorporaciones;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.saydc.dao.BusquedasDAO;
import com.saydc.dao.EmpleadosDAO;
import com.saydc.dao.PuestosDAO;
import com.saydc.forms.incorporaciones.IncorporaEmpleadoForm;
import com.saydc.model.Busqueda;
import com.saydc.model.Empleado;
import com.saydc.model.EstadoBusqueda;
import com.saydc.model.Expertise;
import com.saydc.model.PuestoEspecifico;

public class IncorporaEmpleadoAction extends Action {
	
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		IncorporaEmpleadoForm empleadoForm = (IncorporaEmpleadoForm)form;
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		
		Busqueda busqueda = (Busqueda)request.getSession().getAttribute("busqueda");
		if(busqueda != null && busqueda.getPuestoEspecifico().getIdPuesto() == empleadoForm.getPuestoEspecifico()
					&& busqueda.getExpertise().getIdExpertise() == empleadoForm.getExpertise()){
			busqueda.setCantIngresada(busqueda.getCantIngresada()+1);
			if(busqueda.getEstado().getIdEstadoBusqueda() == EstadoBusqueda.NUEVA){
				busqueda.setEstado(EstadoBusqueda.getEstadoBusqueda(EstadoBusqueda.ACTIVA));
			}
			if(busqueda.getCantBuscada() == busqueda.getCantIngresada()){
				busqueda.setEstado(EstadoBusqueda.getEstadoBusqueda(EstadoBusqueda.FINALIZADA));
				busqueda.setFechaFin(new Date());
			}
			BusquedasDAO busqDao = BusquedasDAO.getInstance();
			busqDao.actualizarBusqueda(busqueda);
		}
		
		Date ingreso = sdf.parse(empleadoForm.getFechaIngreso());
		Expertise expertise = Expertise.getTipoExpertise(empleadoForm.getExpertise());
		Empleado empleado = new Empleado(empleadoForm.getLegajo(), empleadoForm.getNombre(), expertise, ingreso, Double.parseDouble(empleadoForm.getRemuneracion()));
		
		PuestosDAO puestosDao = PuestosDAO.getInstance();
		PuestoEspecifico puesto = puestosDao.getPuestoEspecifico(empleadoForm.getPuestoEspecifico());
		empleado.setPuestoActual(puesto);
		
		EmpleadosDAO dao = EmpleadosDAO.getInstance();
		dao.altaEmpleado(empleado);
		
		return mapping.findForward("success");
	}

}
